package dataMining.VertialTopK2;

/**
 * @author: cuiH
 * Date: 13-8-2
 * 建立一个top_n已经存在的列表，验证成功则存入列表，从四项集开始建立
 */
public class Pruning {
    public static int itemLength = 9;                                                  //定义一个最长的长度
    public static int[][] itemMatrix = new int[1000][itemLength];                   //暂时用一个足够大的矩阵
    public static int itemNumber = 0;                                                //用来记录已经保存的item个数

    Boolean verify(int[] testItem) {
        if (testItem[testItem.length - 1] == 0) {                    //存在重复的情况直接剪枝
            return false;
        } else if (testItem.length > 2) {                           //此时开始建立数组
            return test(testItem);
        } else {                                                     //二项集的情况，满足即可返回成功
            return true;
        }
    }

    //做矩阵测试
    Boolean test(int[] item) {
        int i = 0;
        if (itemNumber == 0) {
            addItem(item);
            return true;
        }
        while (i < itemNumber) {
            int j = 0;
            while (j < item.length) {
                if (item[j] != itemMatrix[i][j]) {
                    i++;
                    break;
                } else {
                    j++;
                    if (j == item.length) {
                        return false;                              //找到了相同的项,全部相等
                    }
                }
            }
            if (i == itemNumber) {
                addItem(item);
                return true;
            }
        }
        return false;
    }


    //建立用于test的数组
    void addItem(int[] addItem) {
        for (int i = 0; i < addItem.length; i++) {
            itemMatrix[itemNumber][i] = addItem[i];
        }
        itemNumber++;
    }
}
